package com.wch.user.config;


import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration    //声明为配置类
@EnableWebSecurity  //启用Spring Security Web 安全的功能
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    /**
     * 我们在添加spring-security依赖后，所有的地址d都被spring-security 所控制了，
     * 我们目前只需要用的BCrypt密码加密的部分，所以我们需要添加这个配置类，配置为所有地址都可以匿名访问
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()          //配置安全策略
                .antMatchers("/**") .permitAll()   // 定义/请求不需要验证
                .anyRequest().authenticated()   // 其余的所有请求都需要验证
                .and().csrf().disable();     //


       /*
       示例
        http
                .authorizeRequests()              //配置安全策略
                .antMatchers("/resources/**", "/signup", "/about").permitAll()   //静态资源以及  /signup  /about的路径允许通过
                .antMatchers("/admin/**").hasRole("ADMIN")     //ADMIN角色的用户能通过 /admin/下是所有
                .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")   //ADMIN 、DBA角色的用户能访问 /db/下路径
                .anyRequest().authenticated()    //其余的都需要验证
                .and()
                .formLogin()                        //指定支持基于表单的身份验证
                .usernameParameter("username")      //
                .passwordParameter("password")      //
                .failureForwardUrl("/login?error")   //失败访问路径
                .loginPage("/login")                 //登录页面
                .permitAll()
                .and()
                .logout()                   //添加退出登录支持
                .logoutUrl("/logout")       //退出登录的处理路径
                .logoutSuccessUrl("/index")   //成功退出后
                .permitAll()
                .and()
                .httpBasic()
                .disable();

                */

    }
}
